package cn.itcast.nems.studentrecord.dto.refund;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

@Data
public class JournalRefundDTO implements Serializable {

      /**
       * 退费单号，生成规则：TF+YYMMDD+ZEROFILL(MURMURHASH(UUID()),0,10) 示例：TF2308281693193454
       */
      private String id;

      /**
       * 新学籍ID
       */
      private String studentRecordId;

      /**
       * 业务日期。注：可能存在业务实际发生日期与录单日期不一致的情况，此日期应为业务实际发生日期。
       * 对应分页办理时间  ？
       */
      @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
      private LocalDateTime bizDate;
      /**
       * 退费的班级ID
       */
      private Integer clazzId;

      /**
       * 退费的班级名称
       */
      private String clazzName;


      /**
       * 退费类型：退报名费、退学费、退多交学费、退电脑使用费等。;注：数据来自来自于老EMS维护的“费用类型”-“退费”
       */
      private String refundTypeId;

      /**
       * 退费类型;注：数据来自来自于老EMS维护的“费用类型”-“退费”
       */
      private String refundTypeName;
      /**
       * 费用类型：培训收入、押金、电脑使用费、吸烟罚款、学生住宿费等。注：数据来自来自于数据字典
       */
      private String costTypeId;

      /**
       * 费用类型，来自于数据字典
       */
      private String costTypeName;

      /**
       * 本次退费金额，单位（分)
       */
      private BigDecimal amount;

      /**
       * 退费原因CODE;来自字典表
       */
      private String reasonCode;

      /**
       * 退费原因说明;来自字典表
       */
      private String reasonDescription;

      /**
       * 备注;发起人填写的备注
       */
      private String remark;

      /**
       * 是否贷款退费：0否、1是
       */
      private Boolean loanFlag;

      /**
       * 贷款公司
       */
      private String loanCompany;

      /**
       * 是否特殊退费：0否、1是
       */
      private Boolean specialFlag;

      /**
       * 是否已开发票：0否、1是
       */
      private Boolean invoiceFlag;

      /**
       * 发票号
       */
      private String invoiceNo;

      /**
       * 状态;枚举值：草稿｜DRAFT、待审批｜PENDING、审批中｜APPROVING、审批未通过｜REJECTED、已完成｜FINISHED
       */
      private String state;

      /**
       * 关联的退学凭单ID;如果退费来自于退学退费的申请，退学凭单ID不应该为空！
       */
      private String journalDropoutId;

      /**
       * 业务线ID;来自于订单上的业务线
       */
      private Integer businessLineId;

      /**
       * 业务线名称;来自于订单上的业务线
       */
      private String businessLineName;

      /**
       * 退费渠道CODE
       */
      private String paymentAccountCode;

      /**
       * 退费渠道名称
       */
      private String paymentAccountName;

      /**
       * 班级列表
       */
      private List<JournalRefundClazzDTO> list ;
      /**
       * 退费退回记录
       */
      private JournalRefundRollbackDTO refundRollback;

      /**
       * 发起人邮箱
       */
      private String createdBy ;
      /**
       * 付款操作人姓名（邮箱）
       */
      private String refundOperatorName ;

      /**
       * 创建时间
       */
      @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
      @JsonSerialize(using = LocalDateTimeSerializer.class)
      @JsonDeserialize(using = LocalDateTimeDeserializer.class)
      private LocalDateTime createdDatetime;

      /**
       * 付款时间
       */
      @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
      @JsonSerialize(using = LocalDateTimeSerializer.class)
      @JsonDeserialize(using = LocalDateTimeDeserializer.class)
      private LocalDateTime refundDate ;

      private Integer studentId;
      private String studentName;
      private String studentNo;
      /**
       * 审批单ID ·
       */
      private String formId;

}